package cn.chinaunicom.mini.program.dingtalk.events.listener;

import cn.chinaunicom.mini.program.dingtalk.events.event.auth.SuiteAuthEvent;
import cn.chinaunicom.mini.program.dingtalk.events.event.auth.SuiteChangeEvent;
import cn.chinaunicom.mini.program.dingtalk.events.event.auth.SuiteTicketEvent;

/**
 * @ProjectName: dingtalk-adapter
 * @Package: cn.chinaunicom.mini.program.dingtalk.events.listener
 * @ClassName: AuthEventListener
 * @Description: 钉钉套件授权事件监听器
 * @Author: wangjc
 * @CreateDate: 2024/6/11
 * @UpdateUser: wangjc
 * @UpdateDate: 2024/6/11
 * @UpdateRemark: 更新内容
 * @Version: 1.0
 */
public interface AuthEventListener {
    /**
     * 处理套件票据事件。
     * 当钉钉发送套件票据更新事件时，此方法将被调用。
     * 通过实现此方法，可以处理与套件票据相关的逻辑，例如刷新票据、存储新票据等。
     *
     * @param event 事件对象，包含套件票据更新事件的具体信息。
     */
    void handleSuiteTicketEvent(SuiteTicketEvent event);

    /**
     * 处理套件授权事件。
     * 当套件的授权状态发生变化时（如新增授权、取消授权），此方法将被调用。
     * 通过实现此方法，可以处理与套件授权相关的逻辑，例如更新授权信息、发送通知等。
     *
     * @param event 事件对象，包含套件授权事件的具体信息。
     */
    void handleSuiteAuthEvent(SuiteAuthEvent event);

    /**
     * 处理套件配置变更事件。
     * 当套件的配置发生变更（如添加新的应用、修改回调URL）时，此方法将被调用。
     * 通过实现此方法，可以处理与套件配置变更相关的逻辑，例如更新配置信息、重新初始化等。
     *
     * @param event 事件对象，包含套件配置变更事件的具体信息。
     */
    void handleSuiteChangeEvent(SuiteChangeEvent event);
}
